package bitops

// n & (n - 1) == 0
// 1. 判断n是不是2的幂次方或者为0
// 2. 每做一次该运算就会消掉最低位的1

// 获取一个数字有多少个1
func CountOnes(n int) int {
	count := 0
	for n > 0 {
		n = n & (n - 1)
		count++
	}
	return count
}

// 找出离数字n最近的2的幂次方数
func Next2Power(n int) int {
	for n&(n-1) != 0 {
		n = n & (n - 1)
	}
	return n << 1
}

func Hex2Rgb(hex int) (uint8, uint8, uint8) {
	return uint8(hex & 0xff0000 >> 16), uint8(hex & 0xff00 >> 8), uint8(hex & 0xff)
}

// Int2Bytes convert int to bytes which use bigEndian byteOrder
func Int2Bytes(n int) []byte {
	bytes := make([]byte, 4)
	bytes[0] = byte(n >> 24)
	bytes[1] = byte(n >> 16)
	bytes[2] = byte(n >> 8)
	bytes[3] = byte(n)
	return bytes
}
